package com.cysoft.starter.log.config;

import com.cysoft.starter.log.core.properties.OperateLogProperties;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * @author 玖零
 * @version v0.0.1
 * @project cysoft-starter
 * @package com.cysoft.starter.log.config
 * @date 2025-02-02 23:13
 * @desc 日志自动装配入口
 */
@Component
@ConditionalOnProperty(prefix = "cysoft.log", name = "enable", havingValue = "true")
@EnableConfigurationProperties(OperateLogProperties.class)
public class LogAutoConfiguration {

    /**
     * 默认配置：将日志输出到控制台
     * 当配置文件中以 "cysoft.log" 为前缀，属性名为 "output.outputType" 的值等于 "default" 时，该方法才会被调用，从而创建对应的配置。
     */
    @Bean
    @ConditionalOnProperty(prefix = "cysoft.log", name = "output.outputType",havingValue = "default")
    public void defaultConfiguration() {
    }


    /**
     * JDBC 配置：将日志输出到数据库
     * 当配置文件中以 "cysoft.log" 为前缀，属性名为 "output.outputType" 的值等于 "jdbc" 时，该方法才会被调用，从而创建对应的配置。
     */
    @Bean
    @ConditionalOnProperty(prefix = "cysoft.log", name = "output.outputType",havingValue = "jdbc")
    public void jdbcConfiguration() {
    }

    /**
     * event 配置：发布Event事件，具体由调用者自行实现
     * 当配置文件中以 "cysoft.log" 为前缀，属性名为 "output.outputType" 的值等于 "event" 时，该方法才会被调用，从而创建对应的配置。
     */
    @Bean
    @ConditionalOnProperty(prefix = "cysoft.log", name = "output.outputType",havingValue = "event")
    public void eventConfiguration() {
    }

    /**
     * Elasticsearch 配置：将日志输出到 Elasticsearch
     * 当配置文件中以 "cysoft.log" 为前缀，属性名为 "output.outputType" 的值等于 "elasticsearch" 时，该方法会被调用，从而创建对应的配置。
     */
    @Bean
    @ConditionalOnProperty(prefix = "cysoft.log", name = "output.outputType",havingValue = "elasticsearch")
    public void elasticsearchConfiguration() {

    }

}
